<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>FLAC: Main Page</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">FLAC
   &#160;<span id="projectnumber">1.4.3</span>
   </div>
   <div id="projectbrief">Free Lossless Audio Codec</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',false,false,'search.php','Search');
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div class="PageDoc"><div class="header">
  <div class="headertitle">
<div class="title">FLAC Documentation</div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><h1><a class="anchor" id="intro"></a>
Introduction</h1>
<p>This is the documentation for the FLAC C and C++ APIs. It is highly interconnected; this introduction should give you a top level idea of the structure and how to find the information you need. As a prerequisite you should have at least a basic knowledge of the FLAC format, documented <a href="https://xiph.org/flac/format.html">here</a>.</p>
<h1><a class="anchor" id="c_api"></a>
FLAC C API</h1>
<p>The FLAC C API is the interface to libFLAC, a set of structures describing the components of FLAC streams, and functions for encoding and decoding streams, as well as manipulating FLAC metadata in files. The public include files will be installed in your include area (for example /usr/include/FLAC/...).</p>
<p>By writing a little code and linking against libFLAC, it is relatively easy to add FLAC support to another program. The library is licensed under <a href="https://xiph.org/flac/license.html">Xiph's BSD license</a>. Complete source code of libFLAC as well as the command-line encoder and plugins is available and is a useful source of examples.</p>
<p>Aside from encoders and decoders, libFLAC provides a powerful metadata interface for manipulating metadata in FLAC files. It allows the user to add, delete, and modify FLAC metadata blocks and it can automatically take advantage of PADDING blocks to avoid rewriting the entire FLAC file when changing the size of the metadata.</p>
<p>libFLAC usually only requires the standard C library and C math library. In particular, threading is not used so there is no dependency on a thread library. However, libFLAC does not use global variables and should be thread-safe.</p>
<p>libFLAC also supports encoding to and decoding from Ogg FLAC. However the metadata editing interfaces currently have limited read-only support for Ogg FLAC files.</p>
<h1><a class="anchor" id="cpp_api"></a>
FLAC C++ API</h1>
<p>The FLAC C++ API is a set of classes that encapsulate the structures and functions in libFLAC. They provide slightly more functionality with respect to metadata but are otherwise equivalent. For the most part, they share the same usage as their counterparts in libFLAC, and the FLAC C API documentation can be used as a supplement. The public include files for the C++ API will be installed in your include area (for example /usr/include/FLAC++/...).</p>
<p>libFLAC++ is also licensed under <a href="https://xiph.org/flac/license.html">Xiph's BSD license</a>.</p>
<h1><a class="anchor" id="getting_started"></a>
Getting Started</h1>
<p>A good starting point for learning the API is to browse through the <a href="modules.html">modules</a>. Modules are logical groupings of related functions or classes, which correspond roughly to header files or sections of header files. Each module includes a detailed description of the general usage of its functions or classes.</p>
<p>From there you can go on to look at the documentation of individual functions. You can see different views of the individual functions through the links in top bar across this page.</p>
<p>If you prefer a more hands-on approach, you can jump right to some <a href="https://xiph.org/flac/documentation_example_code.html">example code</a>.</p>
<h1><a class="anchor" id="porting_guide"></a>
Porting Guide</h1>
<p>Starting with FLAC 1.1.3 a <a class="el" href="group__porting.html">Porting Guide </a> has been introduced which gives detailed instructions on how to port your code to newer versions of FLAC.</p>
<h1><a class="anchor" id="embedded_developers"></a>
Embedded Developers</h1>
<p>libFLAC has grown larger over time as more functionality has been included, but much of it may be unnecessary for a particular embedded implementation. Unused parts may be pruned by some simple editing of src/libFLAC/Makefile.am. In general, the decoders, encoders, and metadata interface are all independent from each other.</p>
<p>It is easiest to just describe the dependencies:</p>
<ul>
<li>All modules depend on the <a class="el" href="group__flac__format.html">Format </a> module.</li>
<li>The decoders and encoders depend on the bitbuffer.</li>
<li>The decoder is independent of the encoder. The encoder uses the decoder because of the verify feature, but this can be removed if not needed.</li>
<li>Parts of the metadata interface require the stream decoder (but not the encoder).</li>
<li>Ogg support is selectable through the compile time macro <code>FLAC__HAS_OGG</code>.</li>
</ul>
<p>For example, if your application only requires the stream decoder, no encoder, and no metadata interface, you can remove the stream encoder and the metadata interface, which will greatly reduce the size of the library.</p>
<p>Also, there are several places in the libFLAC code with comments marked with "OPT:" where a #define can be changed to enable code that might be faster on a specific platform. Experimenting with these can yield faster binaries. </p>
</div></div><!-- PageDoc -->
</div><!-- contents -->

<hr size="1"/>
Copyright (c) 2000-2009  Josh Coalson
Copyright (c) 2011-2023  Xiph.Org Foundation
<!-- Copyright (c) 2000-2009  Josh Coalson -->
<!-- Copyright (c) 2011-2023  Xiph.Org Foundation -->
<!-- Permission is granted to copy, distribute and/or modify this document -->
<!-- under the terms of the GNU Free Documentation License, Version 1.1 -->
<!-- or any later version published by the Free Software Foundation; -->
<!-- with no invariant sections. -->
<!-- A copy of the license can be found at http://www.gnu.org/copyleft/fdl.html -->
</body>
</html>
